Communication systems take many forms. In general, the purpose of a communication system is to transmit information-bearing signals from a source, located at one point, to a user destination, located at another point some distance away. A communication system generally consists of three basic components: transmitter, channel, and receiver. The transmitter has the function of processing the message signal into a form suitable for transmission over the channel. This processing of the message signal is referred to as modulation. The function of the channel is to provide a physical connection between the transmitter output and the receiver input. The function of the receiver is to process the received signal so as to produce an estimate of the original message signal. This processing of the received signal is referred to as demodulation.
Analog and digital transmission methods are used to transmit a message signal over the communication channel. The use of digital methods offers several operational advantages over analog methods, including but not limited to: increased immunity to channel noise and interference, flexible operation of the system, common format for the transmission of different kinds of message signals, improved security of communication through the use of encryption and increased capacity.
With digital communication, user information such as speech is encoded into sequences of binary information symbols. This encoding is convenient for modulation and is easily error-correction coded for transmission over a potentially degrading communication channel. In order to deliver reliable information in a noisy environment, many techniques (e.g., convolutional encoding, interleaving at the symbol level, . . . , etc.) are utilized to improve the quality of the demodulated signal. Although these techniques greatly improve the reliability of information transmitted, situations exist where current techniques are inadequate to provide reliable information in noisy environments. An example of this is the convolutional turbo code (CTC) in the orthogonal frequency division multiple access (OFDMA) mode of IEEE 802.16. The turbo interleaver of the CTC uses an almost regular permutationP(j)=(P0j+d(j))mod N  (1)where 0≦j≦N−1 is the sequential index, P(j) is the permuted index, N is the information block size in bit couples, P0 is a number that is relatively prime to N, and d(j) is a dither vector. For example, in IEEE 802.16 d(j) assumes the form
                              d          ⁡                      (            j            )                          =                  {                                                                      1                  ,                                                                                                  j                    ⁢                                                                                  ⁢                    mod                    ⁢                                                                                  ⁢                    4                                    =                  0                                                                                                      1                  +                                      N                    /                    2                                    +                                      P                    1                                                                                                                                          j                      ⁢                      mod                                        ⁢                                                                                  ⁢                    4                                    =                  1                                                                                                      1                  +                                      P                    2                                                                                                                                          j                      ⁢                      mod                                        ⁢                                                                                  ⁢                    4                                    =                  2                                                                                                      1                  +                                      N                    /                    2                                    +                                      P                    3                                                                                                                                          j                      ⁢                      mod                                        ⁢                                                                                  ⁢                    4                                    =                  3                                                                                        (        2        )            for 0≦j≦N−1. Equations (1) and (2) are equivalent to the following pseudocode:
for j=0, . . . , N−1                switch j mod 4:                    case 0: P(j)=(P0j+1)mod N            case 1: P(j)=(P0j+1+N/2+P1)mod N            case 2: P(j)=(P0j+1+P2)mod N            case 3: P(j)=(P0j+1+N/2+P3)mod N.                        
In general, the values of P0, P1, P2, and P3 depend on N. Some prior art values for blocks of size 120, 240, 360, 480, and 600 bytes are listed in the following table.
Data blocksize (bytes)NP0P1P2P31204801324012018024096013480240720360144017720360540480192017960480144060024001712006001800When the values of P0, P1, P2, and P3 for each N are properly designed, the code performance will improve with increasing block size. Furthermore, no error floor will be discernable above a block error rate of 10−4. An error floor is a sudden decrease in the slope of the curve of the logarithm of the block error rate versus signal-to-noise ratio. Unfortunately, the performance of the CTC with the prior art parameters given in the previous table displays the opposite. With these parameters, the code performance degrades with increasing block size and a distinct error floor is present above a block error rate of 10−4. Consequently there exists a need for a method and apparatus for interleaving that alleviates the above-mentioned problems.